[t:/]$ 지식_

컬럼형 저장소

2024/09/03

컬럼형 저장소를 쓰면 그룹바이 연산에 강하다.

컬럼을 선형접근 하면서 데이터를 처리할 수 있다. 처리할 데이터가 계속 가까이에 있다.

따라서 캐시힛트율이 높다. 재사용을 뜻하는 것은 아니고 메모리에서 퍼담을 때 가져오는 청크에 대해 바로 캐시에서 접근한다는 뜻이다. 데이터 단편화 율이 적으므로 가능한 일이다. 구닥다리 하드디스크를 쓴다면 헤드 이동 비용마저 적다.

비슷한 데이터가 뭉쳐있을 확률이 높으므로 압축 저장소를 쓰는 경우에도 압축효율이 높다. IO가 처리하는 동안 CPU가 주로 놀고 있으므로 CPU에게 일을 더 시키고 IO 비용을 줄이면 컴퓨팅 파워를 더 많이 뽑아쓸 수 있다.

빈 데이터도 많이 있다. 압축 효율이 높고 뭉쳐있으므로 더 빠르게 처리할 수 있다.

한 편으로,

컬럼1, 2, 3...... n 의 데이터에 대해 각각 그룹바이 카운트를 하는 상황이다. 여기에 특정 컬럼에 대한 컨디션 (where)가 붙어있다. 이제 컬럼형 저장소는 쉽게 위력을 잃을 것 같다. 선각자들이 여러 방법을 고안했겠으나 전통적인 줄단위로 처리하는 것이 명료하고 쉽다.

어차피 살펴야 할 컬럼이므로 위에서 말한 캐시효율, 데이터 로캘리티 측면에서 줄단위 처리가 유리하다. MR에 간단한 트릭을 적용하면 한 번에 효율적으로 처리할 수 있다.

데이터 프레임이나 전통적인 쿼리를 이용하여 처리한다면 개별의 컬럼에 대해 처리하고 union 병합을 해야 한다. 물론 쿼리 최적화 장치가 컬럼 저장소를 단 1번만 스캔하면서 처리하긴 할 가능성은 높다. 아마도 그럴것이다. 그러나 컨디션 처리를 위해서는 더 많은 메모리를 쓰거나 컨디션 컬럼을 다녀와야 한다. 하드디스크라면 헤드가 여행을 해야 한다. 메모리 관점에서도 선형 접근이 깨지고 랜덤 접근으로 바뀐다. 하드디스크의 헤드 여행과 비슷하다. 랜덤 접근에서도 매우 효율이 떨어지는 랜덤 접근이므로 캐시 이빅션이 일어나든 캐시 힛트가 떨어질 확률은 높을 것이다.





공유하기













[t:/] is not "technology - root". dawnsea, rss